// 对Date的扩展，将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子：
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
function formatDate(date, fmt) {
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
    }
    let o = {
        'M+': date.getMonth() + 1,
        'd+': date.getDate(),
        'h+': date.getHours(),
        'm+': date.getMinutes(),
        's+': date.getSeconds()
    }
    for (let k in o) {
        if (new RegExp(`(${k})`).test(fmt)) {
            let str = o[k] + ''
            fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : padLeftZero(str))
        }
    }
    return fmt
}
function padLeftZero(str) {
    return ('00' + str).substr(str.length)
}
//授权处理
function applyNotice(callBack) {
    wx.openSetting({
        success: (res) => {
            console.log("授权结果..")
            console.log(res)
            callBack(res)
            if (!res.authSetting["scope.userInfo"] || !res.authSetting["scope.userLocation"]) {
                //applyNotice()
            }
        }
    })
}
/*
显示toast提示
title:    提示的内容 必填
icon:     图标，//请指定正确的路径，选填
duration: 提示的延迟时间，单位毫秒，默认：1500, 10000永远存在除非手动清除 选填
mask:     是否显示透明蒙层，防止触摸穿透，默认：true 选填
cb:       接口调用成功的回调函数 选填
 */
function showToast(obj) {
    if (typeof obj == 'object' && obj.title) {
        if (!obj.duration || typeof obj.duration != 'number') { obj.duration = 1500; }//默认1.5s后消失
        var that = getCurrentPages()[getCurrentPages().length - 1];//获取当前page实例
        obj.isShow = true;//开启toast
        if (obj.duration < 10000) {
            setTimeout(function () {
                obj.isShow = false;
                obj.cb && typeof obj.cb == 'function' && obj.cb();//如果有成功的回调则执行
                that.setData({
                    'showToast.isShow': obj.isShow
                });
            }, obj.duration);
        }
        that.setData({
            showToast: obj
        });
    } else {
        console.log('showToast fail:请确保传入的是对象并且title必填');
    }
}
/**
 *手动关闭toast提示
 */
function hideToast() {
    var that = getCurrentPages()[getCurrentPages().length - 1];//获取当前page实例
    if (that.data.showToast) {
        that.setData({
            'showToast.isShow': false
        });
    }
}
/*
显示弹窗提示
title:    提示的内容 必填
icon:     图标，//请指定正确的路径，选填
duration: 提示的延迟时间，单位毫秒，默认：1500, 10000永远存在除非手动清除 选填
mask:     是否显示透明蒙层，防止触摸穿透，默认：true 选填
cb:       接口调用成功的回调函数 选填
 */
function showDialog(obj) {
    if (typeof obj == 'object') {
        var that = getCurrentPages()[getCurrentPages().length - 1];//获取当前page实例
        obj.isShow = true;//开启弹窗
        that.setData({
            showDialog: obj
        });
    } else {
        console.log('showDialog fail:请确保传入的是对象并且title必填');
    }
}
/**
 *手动关闭Dialog提示
 */
function hideDialog() {
    var that = getCurrentPages()[getCurrentPages().length - 1];//获取当前page实例
    if (that.data.showDialog) {
        that.setData({
            'showDialog.isShow': false
        });
    }
}
//格式化字符串图片数组
function formatImgArr(str){
    if (str instanceof Array) {
        return str;
    }
    if (str && str !== '') {
        if (str.indexOf(',') > 0) {
            return str.split(',')
        } else {
            return [str]
        }
    }
    return []

}
function getQueryString(str,name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = str.match(reg);
    if (r != null) return unescape(r[2]); return null;
}
//判断是否手机号码
function isPhone(str){
    return /^1(3|4|5|7|8|9)\d{9}$/.test(str)
}
//通用跳转方法
function goNavigationUrl(e){
    let dataset = e.currentTarget.dataset;
    let parStr = '?';
    for (var i in dataset) {
        if (i != 'url') {
            parStr += i + '=' + dataset[i] + '&' 
        }
    }
    console.log(parStr)
    wx.navigateTo({
        url: dataset.url + parStr,
    })
}
//通用设置输入框值
function inputValueChange(e,obj){
    let dataset = e.currentTarget.dataset;
    let kVal = dataset.key;
    obj.setData({
        [dataset.key]: e.detail.value
    })
}
//订单状态
const orderStatus = {
    'door': {
        '10': '待支付',
        '20': '待确认',
        '50': '待完成',
        '60': '待评价',
        '65': '退款',
        '67': '商户拒绝退款',
        '70': '客服介入中',
        '79': '退款异常处理中',
        '80': '退款成功',
        '90': '已取消'
    },
    'shop': {
        '20': '待使用',
        '60': '待评价',
        '65': '退款',
        '67': '商户拒绝退款',
        '70': '客服介入中',
        '79': '退款异常处理中',
        '80': '退款成功',
        '90': '已取消'
    }
}
//预约时间状态
const appointTimeStatus = {
    0: '不可用',
    1: '可上门',
    2: '可上门 ',
    4: '已被预约'
}
//10抵用券 15折扣券 20满减券 25兑换券
const couponStatus = {
    10: '抵用券',
    15: '折扣券',
    20: '满减券 ',
    25: '兑换券'
}
module.exports = {
    formatDate: formatDate,
    applyNotice: applyNotice,
    //出现toast
    showToast: showToast,
    //关闭toast
    hideToast: hideToast,
    //出现弹窗
    showDialog: showDialog,
    //关闭弹窗
    hideDialog: hideDialog,
    formatImgArr: formatImgArr,
    //获取参数
    getQueryString: getQueryString,
    isPhone: isPhone,
    orderStatus: orderStatus,
    goNavigationUrl: goNavigationUrl,
    inputValueChange: inputValueChange,
    appointTimeStatus: appointTimeStatus
}
